#! /bin/sh
# PCP QA Test No. 300
# Change in handling of .NeedInstall and .NeedRemove protocols
#
# Copyright (c) 2005 Silicon Graphics, Inc.  All Rights Reserved.
#

seq=`basename $0`
echo "QA output created by $seq"

# get standard filters
. ./common.product
. ./common.filter
. ./common.check

status=0	# success is the default!
trap "_cleanup; exit \$status" 0 1 2 3 15

_cleanup()
{
    [ -f $PCP_LOG_DIR/NOTICES.qa.$seq ] && $sudo mv $PCP_LOG_DIR/NOTICES.qa.$seq $PCP_LOG_DIR/NOTICES
    _service pmcd restart 2>&1 | _filter_pcp_restart
    _wait_for_pmcd
    _restore_auto_restart pmcd
    _service pmlogger restart 2>&1 | _filter_pcp_restart \
    | sed -e '/pmlogger not running/d'
    _wait_for_pmlogger
    _wait_for_pmcd
    $sudo rm -rf $tmp.* $PCP_VAR_DIR/pmdas/bozo
}

# Usage: _check_need dir .Need<something>
#
_check_need()
{
    for file in $1/$2*
    do
	case "$file"
	in
	    *\*)
	    	echo "$2 missing"
		;;
	    *)
	    	echo "`echo "$file" | sed -e "s@^$1/@@"` present"
		;;
	esac
    done
}

# check if "auto.update" lock is already in place ... should not be, but
# if it is that implies something died badly before we got here
#
if [ -f $PCP_TMPFILE_DIR/pmda.auto.update ]
then
    echo "Arrgh: lock file is pre-existing!"
    ls -l $PCP_TMPFILE_DIR/pmda.auto.update
    exit
fi

$sudo rm -rf $PCP_VAR_DIR/pmdas/bozo
$sudo mkdir $PCP_VAR_DIR/pmdas/bozo
cat <<End-of-File >$tmp.sh
#!/bin/sh
# from PCP QA $seq

[ -f $PCP_VAR_DIR/pmdas/bozo/fail ] && exit 1
exit 0
End-of-File

$sudo cp $tmp.sh $PCP_VAR_DIR/pmdas/bozo/Install
$sudo cp $tmp.sh $PCP_VAR_DIR/pmdas/bozo/Remove
$sudo chmod 755 $PCP_VAR_DIR/pmdas/bozo/Install
$sudo chmod 755 $PCP_VAR_DIR/pmdas/bozo/Remove
$sudo rm -f $PCP_VAR_DIR/pmdas/bozo/.NeedInstall*
$sudo rm -f $PCP_VAR_DIR/pmdas/bozo/.NeedRemove*
$sudo touch $PCP_VAR_DIR/pmdas/bozo/.NeedInstall
$sudo touch $PCP_VAR_DIR/pmdas/bozo/fail
$sudo mv $PCP_LOG_DIR/NOTICES $PCP_LOG_DIR/NOTICES.qa.$seq

if ! _service pmlogger stop 2>&1; then _exit 1; fi \
| _filter_pcp_stop
_wait_pmlogger_end || _exit 1
if ! _service pmcd stop 2>&1; then _exit 1; fi \
| _filter_pcp_stop
_wait_pmcd_end || _exit 1

# real QA test starts here
echo "Install should fail"
if ! _service pmcd restart 2>&1; then _exit 1; fi | _filter_pcp_restart
_wait_for_pmcd || _exit 1
pmsleep 1.5	# give script time to execute
_check_need $PCP_VAR_DIR/pmdas/bozo .NeedInstall

echo
echo "Install should succeed"
$sudo rm -f $PCP_VAR_DIR/pmdas/bozo/.NeedInstall*
$sudo touch $PCP_VAR_DIR/pmdas/bozo/.NeedInstall
$sudo rm -f $PCP_VAR_DIR/pmdas/bozo/fail
if ! _service pmcd restart 2>&1; then _exit 1; fi | _filter_pcp_restart
_wait_for_pmcd || _exit 1
pmsleep 1.5	# give script time to execute
_check_need $PCP_VAR_DIR/pmdas/bozo .NeedInstall

echo
echo "Remove should fail"
$sudo rm -f $PCP_VAR_DIR/pmdas/bozo/.NeedRemove*
$sudo touch $PCP_VAR_DIR/pmdas/bozo/.NeedRemove
$sudo touch $PCP_VAR_DIR/pmdas/bozo/fail
if ! _service pmcd restart 2>&1; then _exit 1; fi | _filter_pcp_restart
_wait_for_pmcd || _exit 1
pmsleep 1.5	# give script time to execute
_check_need $PCP_VAR_DIR/pmdas/bozo .NeedRemove

echo
echo "Remove should succeed"
$sudo rm -f $PCP_VAR_DIR/pmdas/bozo/.NeedRemove*
$sudo touch $PCP_VAR_DIR/pmdas/bozo/.NeedRemove
$sudo rm -f $PCP_VAR_DIR/pmdas/bozo/fail
if ! _service pmcd restart 2>&1; then _exit 1; fi | _filter_pcp_restart
_wait_for_pmcd || _exit 1
pmsleep 1.5	# give script time to execute
_check_need $PCP_VAR_DIR/pmdas/bozo .NeedRemove

echo
echo "Check pmpost messages ..."
cat $PCP_LOG_DIR/NOTICES > $seq_full
grep -E '(Install|Remove).*bozo$' $PCP_LOG_DIR/NOTICES \
| sed \
    -e 's/^[0-9][0-9]*:[0-9][0-9]*:[0-9]*\.[0-9]* /TIME /' \
    -e 's/\(check for host \).*/\1HOSTNAME/'

# success, all done
exit
